iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0

Find Peak Element (LeetCode 162, Binary Search)

thoughts

  • 峰值定義:nums[i] > nums[i-1] && nums[i] > nums[i+1]
  • 因為 總有一個峰值存在,可用 Binary Search O(log n)。
  • 判斷方向:
    • 如果 nums[mid] < nums[mid+1] → 峰值在右邊
    • 否則 → 峰值在左邊

kotlin

class Solution {
    fun findPeakElement(nums: IntArray): Int {
        var left = 0
        var right = nums.size - 1
        while (left < right) {
            val mid = (left + right) / 2
            if (nums[mid] < nums[mid + 1]) {
                left = mid + 1
            } else {
                right = mid
            }
        }
        return left
    }
}

follow up

  • 如果有多個峰值,是否要回傳第一個 / 任意一個?
  • 如果陣列是循環的 (circular array),怎麼處理?
  • 如果是 2D 矩陣找峰值?(延伸題:LeetCode 1901 Find a Peak Element II)

上一篇
#13
下一篇
#15
系列文
來都來了-涮就涮吧16
  1. 12
    #11
  2. 13
    #12
  3. 14
    #13
  4. 15
    #14
  5. 16
    #15
完整目錄
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言